package nfeitens;

import cfop.Cfop;
import cfop.CfopDao;
import forn.Fornecedores;
import forn.FornecedoresDao;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBException;
import jaxb.Jaxb;
import master.Master;
import nfe.Nfe;
import produto.Produto;
import produto.ProdutoDao;
import ref.ProdutoReferencia;
import ref.ProdutoReferenciaDao;

/**
 *
 * @author camilo
 */
public class NfeItensxml {

  Produto prod;
  ProdutoReferencia pref;
  Fornecedores forn;
  Cfop cfop;

  /**
   *
   * @param caminho
   * @param nfei
   * @return
   * @throws JAXBException
   * @throws ParseException
   */
  public List<NfeItens> setClasseNfe(String caminho, Nfe nfe) throws JAXBException, ParseException, SQLException {
    /**
     * Cria uma lista NfeItens com "sublistas" também NfeItens
     */
    List<NfeItens> minhaLista = new ArrayList<>();
//    captura a quantidade de itens no xml para definir o fim do "for"
    Integer qt = getQtdProd(caminho);
    Master.jpStatus.setMaximum(qt - 1);
    Master.setMessageStatus("Iniciando a importação dos itens do arquivo Xml...");
    //      captura os produtos em xml e cria as linhas na lista referente a cada produto encontrado
    for (int i = 0; i < qt; i++) {
      Master.jpStatus.setValue(i);
      NfeItens nfei = new NfeItens();
      ProdutoDao pdao = new ProdutoDao();
      FornecedoresDao fdao = new FornecedoresDao();
      ProdutoReferenciaDao prdao = new ProdutoReferenciaDao();
      CfopDao cfopDao = new CfopDao();
      /**
       * busca informações no BD para definir o código do produto<br/> primeiro encontra o código do
       * fornecedor<br/> busca o código de referência no xml<br/> consulta no banco de dados se a referencia
       * já está cadastrada<br/> se estiver cadastrada busca o código do produto no banco de dados com as
       * informações da referência<br/> se falhar, busca as informações do produto através do código de barras
       * encontrado no xml<br/>
       */
      Master.setMessageStatus("Definindo codígo EAN do item " + i);
      forn = fdao.getForn(nfe.getEntidade());
      nfei.setRef(this.getRef(caminho, i));
      pref = prdao.getProdRef(nfei.getRef(), forn.getId());

      if (pref.getProduto() != null) {
        prod = pdao.getProduto(pref.getProduto());
        if (prod.getProduto() != null) {
          nfei.setProduto(prod.getProduto());
          nfei.setBarras(prod.getBarras());
        }
      } else {
        prod = pdao.getProduto(this.getBarras(caminho, i));
        if (prod.getProduto() != null) {
          nfei.setProduto(prod.getProduto());
          nfei.setBarras(prod.getBarras());
        } else {
          nfei.setBarras(this.getBarras(caminho, i));
        }
      }
      nfei.setItem(this.getItem(caminho, i));

      //nfei.setBarras(this.getBarras(caminho, i));
      nfei.setDescricao(this.getDescricao(caminho, i).replaceAll("#", ""));
//      cfop
      cfop = cfopDao.getCfop(this.getCfop(caminho, i));
      nfei.setCfop(cfop.getCfop_entrada());

      this.setImposto(caminho, i, nfei);
      nfei.setIpi(Float.parseFloat(this.getIpi(caminho, i)));
      nfei.setValorIpi(Float.parseFloat(this.getVIpi(caminho, i)));
      nfei.setQuantidade(Float.parseFloat(this.getQtd(caminho, i)));
      nfei.setValorUnitario(Float.parseFloat(this.getVUn(caminho, i)));
      nfei.setValorTotal(Float.parseFloat(this.getTotal(caminho, i)));
//      adiciona a linha à lista
      minhaLista.add(nfei);
      
    }
    return minhaLista;
  }

  public Integer getQtdProd(String caminho) throws JAXBException {
    Jaxb nfe = new Jaxb();
    Integer qt = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().size();
    return qt;
  }

  public String getItem(String caminho, Integer item) throws JAXBException {
    Jaxb nfe = new Jaxb();
    String it;
    it = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getNItem();
    return it;
  }

  public String getRef(String caminho, Integer item) throws JAXBException {
    Master.setMessageStatus("Processando dados do Xml... (Definindo cod. referencia) ");
    Jaxb nfe = new Jaxb();
    Integer r;
    String rf;
    try {
      r = Integer.parseInt(nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item)
              .getProd().getCProd().replace(".0", ""));
      rf = r.toString();
    } catch (NumberFormatException e) {
      rf = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item)
              .getProd().getCProd().replace(".0", "");
    }
    return rf;
  }

  public String getBarras(String caminho, Integer item) throws JAXBException {
    Master.setMessageStatus("Processando dados do Xml... (Capturando cod EAN) ITEM:" + item);
    Jaxb nfe = new Jaxb();
    String br;
    br = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getProd().getCEANTrib();
    /**
     * Se não estiver definido nenhum código de barras retorna a variável zerada para evitar que a consulta
     * retorne todos os registros da tabela
     */
    if (br.isEmpty()) {
      br = "0000000000000";
    }
    return br;
  }

  public String getDescricao(String caminho, Integer item) throws JAXBException {
    Master.setMessageStatus("Processando dados do Xml... (Importando Descriçao) Item:" + item);
    Jaxb nfe = new Jaxb();
    String br;
    br = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getProd().getXProd();
    return br;
  }

  public String getCfop(String caminho, Integer item) throws JAXBException {
    Master.setMessageStatus("Processando dados do Xml... (Importando CFOP) Item:" + item);
    Jaxb nfe = new Jaxb();
    String br;
    br = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getProd().getCFOP();
    return br;
  }

  public NfeItens setImposto(String caminho, Integer item, NfeItens nfei) throws JAXBException {
    Jaxb nfe = new Jaxb();
    String cst, icms, vicms, red, ipi, vipi, mva;
    Integer i = 1;
    for (int j = 0; j < 10; j++) {
      switch (j) {
        case 0:
          try {
            Master.setMessageStatus("Processando dados do Xml... (Verificando CST '00', item " + item + ")");
            cst = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS00().getOrig()
                    + nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS00().getCST();
            nfei.setCst(cst);

            Master.setMessageStatus("Processando dados do Xml... (Verificando ICMS '00', item " + item + ")");
            icms = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS00().getPICMS();
            nfei.setIcms(Float.parseFloat(icms));

            Master.setMessageStatus("Processando dados do Xml... (Verificando vICMS '00', item " + item + ")");
            vicms = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS00().getVICMS();
            nfei.setValorIcms(Float.parseFloat(vicms));

            return nfei;
          } catch (NullPointerException e) {
            System.out.println("Null em case 0 - item " + item);
          }
        case 1:
          try {
            Master.setMessageStatus("Processando dados do Xml... (Verificando CST '10', item " + item + ")");
            cst = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS10().getOrig()
                    + nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS10().getCST();
            nfei.setCst(cst);

            Master.setMessageStatus("Processando dados do Xml... (Verificando ICMS '10', item " + item + ")");
            icms = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS10().getPICMS();
            nfei.setIcms(Float.parseFloat(icms));

            Master.setMessageStatus("Processando dados do Xml... (Verificando vICMS '10', item " + item + ")");
            vicms = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS10().getVICMS();
            nfei.setValorIcms(Float.parseFloat(vicms));

            Master.setMessageStatus("Processando dados do Xml... (Verificando MVA '10', item " + item
                    + ")");
            mva = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS10().getPMVAST();
            nfei.setMva(Float.parseFloat(mva));

            return nfei;
          } catch (NullPointerException e) {
            if (nfei.getCst() == null && nfei.getIcms() == null && nfei.getValorIcms() == null
                    && nfei.getMva() == null) {
              System.out.println("Null em case 1 - item " + item);
            } else {
              return nfei;
            }
          }
        case 2:
          try {
            Master.setMessageStatus("Processando dados do Xml... (Verificando CST '20', item " + item + ")");
            cst = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS20().getOrig()
                    + nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS20().getCST();
            nfei.setCst(cst);

            Master.setMessageStatus("Processando dados do Xml... (Verificando ICMS '20', item " + item + ")");
            icms = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS20().getPICMS();
            nfei.setIcms(Float.parseFloat(icms));

            Master.setMessageStatus("Processando dados do Xml... (Verificando vICMS '20', item " + item + ")");
            vicms = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS20().getVICMS();
            nfei.setValorIcms(Float.parseFloat(vicms));

            Master.setMessageStatus("Processando dados do Xml... (Verificando Redução '20', item " + item + ")");
            red = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS20().getPRedBC();
            nfei.setRedIcms(Float.parseFloat(red));

            return nfei;
          } catch (NullPointerException e) {
            System.out.println("Null em case 2 - item " + item);
          }
        case 3:
          try {
            Master.setMessageStatus("Processando dados do Xml... (Verificando CST '30', item " + item + ")");
            cst = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS30().getOrig()
                    + nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS30().getCST();
            nfei.setCst(cst);

            Master.setMessageStatus("Processando dados do Xml... (Verificando MVA '30', item " + item
                    + ")");
            mva = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS30().getPMVAST();
            nfei.setMva(Float.parseFloat(mva));

            return nfei;
          } catch (NullPointerException e) {
            System.out.println("Null em case 3 - item " + item);
          }
        case 4:
          try {
            Master.setMessageStatus("Processando dados do Xml... (Verificando CST '40', item " + item + ")");
            cst = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS40().getOrig()
                    + nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS40().getCST();
            nfei.setCst(cst);

            Master.setMessageStatus("Processando dados do Xml... (Verificando vICMS '40', item " + item + ")");
            vicms = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS40().getVICMS();
            nfei.setValorIcms(Float.parseFloat(vicms));

            return nfei;
          } catch (NullPointerException e) {
            System.out.println("Null em case 4 - item " + item);
          }
        case 5:
          try {
            Master.setMessageStatus("Processando dados do Xml... (Verificando CST '51', item " + item + ")");
            cst = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS51().getOrig()
                    + nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS51().getCST();
            nfei.setCst(cst);

            Master.setMessageStatus("Processando dados do Xml... (Verificando ICMS '51', item " + item + ")");
            icms = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS51().getPICMS();
            nfei.setIcms(Float.parseFloat(icms));

            Master.setMessageStatus("Processando dados do Xml... (Verificando vICMS '51', item " + item + ")");
            vicms = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS51().getVICMS();
            nfei.setValorIcms(Float.parseFloat(vicms));

            Master.setMessageStatus("Processando dados do Xml... (Verificando Redução '51', item " + item + ")");
            red = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS51().getPRedBC();
            nfei.setRedIcms(Float.parseFloat(red));
            return nfei;
          } catch (NullPointerException e) {
            System.out.println("Null em case 5 - item " + item);
          }
        case 6:
          try {
            Master.setMessageStatus("Processando dados do Xml... (Verificando CST '60', item " + item + ")");
            cst = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS60().getOrig()
                    + nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS60().getCST();
            nfei.setCst(cst);
            return nfei;
          } catch (NullPointerException e) {
            System.out.println("Null em case 6 - item " + item);
          }
        case 7:
          try {
            Master.setMessageStatus("Processando dados do Xml... (Verificando CST '70', item " + item + ")");
            cst = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS70().getOrig()
                    + nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS70().getCST();
            nfei.setCst(cst);

            Master.setMessageStatus("Processando dados do Xml... (Verificando ICMS '70', item " + item + ")");
            icms = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS70().getPICMS();
            nfei.setIcms(Float.parseFloat(icms));

            Master.setMessageStatus("Processando dados do Xml... (Verificando vICMS '70', item " + item + ")");
            vicms = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS70().getVICMS();
            nfei.setValorIcms(Float.parseFloat(vicms));

            Master.setMessageStatus("Processando dados do Xml... (Verificando MVA '70', item " + item
                    + ")");
            mva = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS70().getPMVAST();
            nfei.setMva(Float.parseFloat(mva));

            Master.setMessageStatus("Processando dados do Xml... (Verificando Redução '70', item " + item + ")");
            red = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS70().getPRedBC();
            nfei.setRedIcms(Float.parseFloat(red));

            return nfei;
          } catch (NullPointerException e) {
            System.out.println("Null em case 7 - item " + item);
          }
        case 8:
          try {
            Master.setMessageStatus("Processando dados do Xml... (Verificando CST '90', item " + item + ")");
            cst = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS90().getOrig()
                    + nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS90().getCST();
            nfei.setCst(cst);

            Master.setMessageStatus("Processando dados do Xml... (Verificando ICMS '90', item " + item + ")");
            icms = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS90().getPICMS();
            nfei.setIcms(Float.parseFloat(icms));

            Master.setMessageStatus("Processando dados do Xml... (Verificando vICMS '90', item " + item + ")");
            vicms = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS90().getVICMS();
            nfei.setValorIcms(Float.parseFloat(vicms));

            Master.setMessageStatus("Processando dados do Xml... (Verificando MVA '90', item " + item + ")");
            mva = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS90().getPMVAST();
            nfei.setMva(Float.parseFloat(mva));

            Master.setMessageStatus("Processando dados do Xml... (Verificando Redução '90', item " + item + ")");
            red = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMS90().getPRedBC();
            nfei.setRedIcms(Float.parseFloat(red));

            return nfei;
          } catch (NullPointerException e) {
            System.out.println("Null em case 8 - item " + item);
          }
        case 9:
          try {
            Master.setMessageStatus("Processando dados do Xml... (Verificando CST '101', item " + item + ")");
            cst = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMSSN101().getCSOSN();
            nfei.setCst(cst);

            return nfei;
          } catch (NullPointerException e) {
            System.out.println("Null em case 9 - item " + item);
          }
        case 10:
          try {
            Master.setMessageStatus("Processando dados do Xml... (Verificando CST '102', item " + item + ")");
            cst = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMSSN102().getCSOSN();
            nfei.setCst(cst);

            return nfei;
          } catch (NullPointerException e) {
            System.out.println("Null em case 10 - item " + item);
          }
        case 11:
          try {
            Master.setMessageStatus("Processando dados do Xml... (Verificando CST '201', item " + item + ")");
            cst = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMSSN201().getCSOSN();
            nfei.setCst(cst);

            Master.setMessageStatus("Processando dados do Xml... (Verificando MVA '201', item " + item + ")");
            mva = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMSSN201().getPMVAST();
            nfei.setMva(Float.parseFloat(mva));

            return nfei;
          } catch (NullPointerException e) {
            System.out.println("Null em case 11 - item " + item);
          }
        case 12:
          try {
            Master.setMessageStatus("Processando dados do Xml... (Verificando CST '202', item " + item + ")");
            cst = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMSSN202().getCSOSN();
            nfei.setCst(cst);

            Master.setMessageStatus("Processando dados do Xml... (Verificando MVA '202', item " + item + ")");
            mva = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMSSN202().getPMVAST();
            nfei.setMva(Float.parseFloat(mva));

            return nfei;
          } catch (NullPointerException e) {
            System.out.println("Null em case 12 - item " + item);
          }
        case 13:
          try {
            Master.setMessageStatus("Processando dados do Xml... (Verificando CST '500', item " + item + ")");
            cst = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMSSN500().getCSOSN();
            nfei.setCst(cst);

            return nfei;
          } catch (NullPointerException e) {
            System.out.println("Null em case 13 - item " + item);
          }
        case 14:
          try {
            Master.setMessageStatus("Processando dados do Xml... (Verificando CST '900', item " + item + ")");
            cst = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMSSN900().getCSOSN();
            nfei.setCst(cst);

            Master.setMessageStatus("Processando dados do Xml... (Verificando ICMS '900', item " + item + ")");
            icms = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMSSN900().getPICMS();
            nfei.setIcms(Float.parseFloat(icms));

            Master.setMessageStatus("Processando dados do Xml... (Verificando vICMS '900', item " + item + ")");
            vicms = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMSSN900().getVICMS();
            nfei.setValorIcms(Float.parseFloat(vicms));

            Master.setMessageStatus("Processando dados do Xml... (Verificando MVA '900', item " + item + ")");
            mva = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMSSN900().getPMVAST();
            nfei.setMva(Float.parseFloat(mva));

            Master.setMessageStatus("Processando dados do Xml... (Verificando Redução '900', item " + item + ")");
            red = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto().getICMS()
                    .getICMSSN900().getPRedBC();
            nfei.setRedIcms(Float.parseFloat(red));

            return nfei;
          } catch (NullPointerException e) {
            System.out.println("Null em case 14 - item " + item);
          }
      }
    }
    return nfei;
  }

  public String getIpi(String caminho, Integer item) throws JAXBException {
    Jaxb nfe = new Jaxb();
    String ipi;
    Master.setMessageStatus("Processando dados do Xml... (Verificando IPI, item " + item + ")");
    try {
      ipi = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto()
              .getIPI().getIPITrib().getPIPI();
      if (ipi == "0.00" || ipi == null) {
        ipi = "0";
      }
      return ipi;
    } catch (NullPointerException e) {
      System.out.println("Não encontrada porcentagem para IPI");
      return ipi = "0";
    }
  }

  public String getVIpi(String caminho, Integer item) throws JAXBException {
    Jaxb nfe = new Jaxb();
    String vipi;
    try {
      Master.setMessageStatus("Processando dados do Xml... (Verificando IPI, item " + item + ")");
      vipi = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getImposto()
              .getIPI().getIPITrib().getVIPI();
      return vipi;
    } catch (NullPointerException e) {
      System.out.println("Não encontrado valor IPI");
      return vipi = "0";
    }
  }

  public String getQtd(String caminho, Integer item) throws JAXBException {
    Master.setMessageStatus("Processando dados do Xml... (Importando quantidades) Item:" + item);
    Jaxb nfe = new Jaxb();
    String br;
    br = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getProd().getQCom();
    return br;
  }

  public String getVUn(String caminho, Integer item) throws JAXBException {
    Master.setMessageStatus("Processando dados do Xml... (Importando Valor Unitario) Item: " + item);
    Jaxb nfe = new Jaxb();
    String br;
    br = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getProd().getVUnCom();
    return br;
  }

  public String getTotal(String caminho, Integer item) throws JAXBException {
    Master.setMessageStatus("Processando dados do Xml... (Importando Total) Item: " + item);
    Jaxb nfe = new Jaxb();
    String br;
    br = nfe.getXml(caminho).getNFe().get(0).getInfNFe().getDet().get(item).getProd().getVProd();
    return br;
  }
  /**
   * "MVA", "Acom", "ICMS", "Redução", "vICMS", "IPI", "vIPI"
   */
}